Reactã®äžŠè¡ã¬ã³ããªã³ã°ãæ·±ãæãäžããFiberã¢ãŒããã¯ãã£ãšã¯ãŒã¯ã«ãŒããæ¢æ±ããŠãã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãšãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæé©åããŸãã
Reactã®äžŠè¡ã¬ã³ããªã³ã°ïŒFiberã¢ãŒããã¯ãã£ãšã¯ãŒã¯ã«ãŒãåæã«ããããã©ãŒãã³ã¹ã®åäž
Reactã¯ãããã³ããšã³ãéçºã«ãããäž»èŠãªå¢åãšããŠããŸããŸãè€éåããã€ã³ã¿ã©ã¯ãã£ããªãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã®èŠæ±ã«å¿ããããã«ç¶ç¶çã«é²åããŠããŸããããã®é²åã«ãããæãéèŠãªé²æ©ã®1ã€ã¯ãReact 16ã§å°å ¥ããã䞊è¡ã¬ã³ããªã³ã°ã§ãããã®ãã©ãã€ã ã·ããã¯ãReactãæŽæ°ã管çããã³ã³ããŒãã³ããã¬ã³ããªã³ã°ããæ¹æ³ãæ ¹æ¬çã«å€ããå€§å¹ ãªããã©ãŒãã³ã¹ã®åäžãå®çŸããããå¿çæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãå¯èœã«ããŸããããã®èšäºã§ã¯ã䞊è¡ã¬ã³ããªã³ã°ã®äžæ žãšãªãæŠå¿µãæãäžããFiberã¢ãŒããã¯ãã£ãšã¯ãŒã¯ã«ãŒããæ¢æ±ãããããã®ã¡ã«ããºã ãããã¹ã ãŒãºã§å¹ççãªReactã¢ããªã±ãŒã·ã§ã³ã«ã©ã®ããã«è²¢ç®ãããã«ã€ããŠã®æŽå¯ãæäŸããŸãã
䞊è¡ã¬ã³ããªã³ã°ã®å¿ èŠæ§ã®çè§£
䞊è¡ã¬ã³ããªã³ã°ä»¥åã¯ãReactã¯åæçã«åäœããŠããŸãããæŽæ°ãçºçãããšïŒäŸïŒç¶æ ã®å€åãpropsã®æŽæ°ïŒãReactã¯ã³ã³ããŒãã³ãããªãŒå šäœãåäžã®ãäžæãããªãæäœã§ã¬ã³ããªã³ã°ãå§ããŸããããã®åæã¬ã³ããªã³ã°ã¯ãç¹ã«å€§èŠæš¡ãªã³ã³ããŒãã³ãããªãŒãŸãã¯èšç®ã³ã¹ãã®é«ãæäœãæ±ãå Žåã«ãããã©ãŒãã³ã¹ã®ããã«ããã¯ã«ã€ãªããå¯èœæ§ããããŸãããããã®ã¬ã³ããªã³ã°æéäžããã©ãŠã¶ã¯å¿çããªããªããããããããããã€ã©ã€ã©ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ã€ãªãããŸããããã¯ãã°ãã°ãã¡ã€ã³ã¹ã¬ããããããã¯ããããšåŒã°ããŸãã
ãŠãŒã¶ãŒãããã¹ããã£ãŒã«ãã«å ¥åããŠããã·ããªãªãæ³åããŠã¿ãŠãã ãããå ¥åãããããã¹ãã衚瀺ããã³ã³ããŒãã³ããå€§èŠæš¡ã§è€éãªã³ã³ããŒãã³ãããªãŒã®äžéšã§ããå ŽåãåããŒã¹ãããŒã¯ã¯ã¡ã€ã³ã¹ã¬ããããããã¯ããåã¬ã³ããªã³ã°ãããªã¬ãŒããå¯èœæ§ããããŸããããã«ãããé¡èãªã©ã°ãçºçããäžå¿«ãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ã€ãªãããŸãã
䞊è¡ã¬ã³ããªã³ã°ã¯ãã¬ã³ããªã³ã°ã¿ã¹ã¯ãããå°ããã管çããããäœæ¥åäœã«åå²ã§ããããã«ããããšã§ããã®åé¡ã«å¯ŸåŠããŸãããããã®ãŠãããã¯ãå¿ èŠã«å¿ããŠåªå é äœä»ããäžæåæ¢ãããã³åéã§ãããããReactã¯ã¬ã³ããªã³ã°ã¿ã¹ã¯ãããŠãŒã¶ãŒå ¥åããããã¯ãŒã¯ãªã¯ãšã¹ãã®åŠçãªã©ãä»ã®ãã©ãŠã¶æäœãšã€ã³ã¿ãŒãªãŒãã§ããŸãããã®ã¢ãããŒãã«ãããã¡ã€ã³ã¹ã¬ãããé·æéãããã¯ãããã®ãé²ããããå¿çæ§ãé«ããæµåçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãå®çŸããŸããããã¯ãReactã®ã¬ã³ããªã³ã°ããã»ã¹ã®ãã«ãã¿ã¹ã¯åŠçãšèããããšãã§ããŸãã
Fiberã¢ãŒããã¯ãã£ã®ç޹ä»
䞊è¡ã¬ã³ããªã³ã°ã®äžå¿ã«ããã®ã¯ãFiberã¢ãŒããã¯ãã£ã§ããFiberã¯ãReactã®å éšãªã³ã³ã·ãªãšãŒã·ã§ã³ã¢ã«ãŽãªãºã ã®å®å šãªåå®è£ ã衚ããŠããŸãã以åã®åæãªã³ã³ã·ãªãšãŒã·ã§ã³ããã»ã¹ãšã¯ç°ãªããFiberã¯ãæŽæ°ã管çããã³ã³ããŒãã³ããã¬ã³ããªã³ã°ããããã®ãããæŽç·Žããããç²åºŠã®çްããã¢ãããŒããå°å ¥ããŸãã
Fiberãšã¯ïŒ
Fiberã¯ãã³ã³ããŒãã³ãã€ã³ã¹ã¿ã³ã¹ã®ä»®æ³è¡šçŸãšããŠæŠå¿µçã«çè§£ã§ããŸããReactã¢ããªã±ãŒã·ã§ã³ã®åã³ã³ããŒãã³ãã¯ã察å¿ããFiberããŒãã«é¢é£ä»ããããŠããŸãããããã®FiberããŒãã¯ãã³ã³ããŒãã³ãããªãŒããã©ãŒãªã³ã°ããããªãŒæ§é ã圢æããŸããåFiberããŒãã¯ãã³ã³ããŒãã³ãããã®propsããã®åãããã³ãã®çŸåšã®ç¶æ ã«é¢ããæ å ±ãä¿æããŸããéèŠãªããšã«ããã®ã³ã³ããŒãã³ãã«å¯ŸããŠè¡ãå¿ èŠã®ããäœæ¥ã«é¢ããæ å ±ãä¿æããŸãã
FiberããŒãã®äž»ãªããããã£ã¯æ¬¡ã®ãšããã§ãã
- type: ã³ã³ããŒãã³ãã®åïŒäŸïŒ
divãMyComponentïŒã - key: ã³ã³ããŒãã³ãã«å²ãåœãŠãããäžæã®ããŒïŒå¹ççãªãªã³ã³ã·ãªãšãŒã·ã§ã³ã«äœ¿çšïŒã
- props: ã³ã³ããŒãã³ãã«æž¡ãããpropsã
- child: ã³ã³ããŒãã³ãã®æåã®åã衚ãFiberããŒããžã®ãã€ã³ã¿ã
- sibling: ã³ã³ããŒãã³ãã®æ¬¡ã®å åŒã衚ãFiberããŒããžã®ãã€ã³ã¿ã
- return: ã³ã³ããŒãã³ãã®èŠªã衚ãFiberããŒããžã®ãã€ã³ã¿ã
- stateNode: å®éã®ã³ã³ããŒãã³ãã€ã³ã¹ã¿ã³ã¹ãžã®åç §ïŒäŸïŒãã¹ãã³ã³ããŒãã³ãã®DOMããŒããã¯ã©ã¹ã³ã³ããŒãã³ãã€ã³ã¹ã¿ã³ã¹ïŒã
- alternate: ã³ã³ããŒãã³ãã®ä»¥åã®ããŒãžã§ã³ã衚ãFiberããŒããžã®ãã€ã³ã¿ã
- effectTag: ã³ã³ããŒãã³ãã«å¿ èŠãªæŽæ°ã®çš®é¡ã瀺ããã©ã°ïŒäŸïŒé çœ®ãæŽæ°ãåé€ïŒã
FiberããªãŒ
FiberããªãŒã¯ãã¢ããªã±ãŒã·ã§ã³ã®UIã®çŸåšã®ç¶æ ãè¡šãæ°žç¶çãªããŒã¿æ§é ã§ããæŽæ°ãçºçãããšãReactã¯ããã¯ã°ã©ãŠã³ãã§æ°ããFiberããªãŒãäœæããæŽæ°åŸã®UIã®ç®çã®ç¶æ ã衚ããŸãããã®æ°ããããªãŒã¯ããwork-in-progressãããªãŒãšåŒã°ããŸããwork-in-progressããªãŒãå®äºãããšãReactã¯ãããçŸåšã®ããªãŒãšäº€æãã倿ŽããŠãŒã¶ãŒã«è¡šç€ºããŸãã
ãã®ãã¥ã¢ã«ããªãŒã¢ãããŒãã«ãããReactã¯ã¬ã³ããªã³ã°ã®æŽæ°ãéããããã³ã°æ¹åŒã§å®è¡ã§ããŸããçŸåšã®ããªãŒã¯ãwork-in-progressããªãŒãããã¯ã°ã©ãŠã³ãã§æ§ç¯ãããŠããéããŠãŒã¶ãŒã«è¡šç€ºããããŸãŸã«ãªããŸããããã«ãããæŽæ°äžã«UIãããªãŒãºããããå¿çããªããªãã®ãé²ããŸãã
Fiberã¢ãŒããã¯ãã£ã®å©ç¹
- å²ã蟌ã¿å¯èœãªã¬ã³ããªã³ã°ïŒ Fiberã䜿çšãããšãReactã¯ã¬ã³ããªã³ã°ã¿ã¹ã¯ãäžæåæ¢ããã³åéã§ããããããŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ãåªå ããã¡ã€ã³ã¹ã¬ããããããã¯ãããã®ãé²ãããšãã§ããŸãã
- ã€ã³ã¯ãªã¡ã³ã¿ã«ã¬ã³ããªã³ã°ïŒ Fiberã䜿çšãããšãReactã¯ã¬ã³ããªã³ã°ã®æŽæ°ãããå°ããäœæ¥åäœã«åå²ã§ããæéã®çµéãšãšãã«æ®µéçã«åŠçã§ããŸãã
- åªå é äœä»ãïŒ Fiberã䜿çšãããšãReactã¯ããŸããŸãªçš®é¡ã®æŽæ°ã«åªå é äœãä»ããããšãã§ãããããéèŠãªæŽæ°ïŒäŸïŒãŠãŒã¶ãŒå ¥åïŒãéèŠåºŠã®äœãæŽæ°ïŒäŸïŒããã¯ã°ã©ãŠã³ãããŒã¿ãã§ããïŒãããåã«åŠçãããããã«ãªããŸãã
- ãšã©ãŒåŠçã®æ¹åïŒ Fiberã䜿çšãããšãã¬ã³ããªã³ã°äžã®ãšã©ãŒã®åŠçã容æã«ãªããŸãããšã©ãŒãçºçããå ŽåãReactã¯ä»¥åã®å®å®ããç¶æ ã«ããŒã«ããã¯ã§ããŸãã
ã¯ãŒã¯ã«ãŒãïŒFiberãã©ã®ããã«äžŠè¡æ§ãå®çŸããã
ã¯ãŒã¯ã«ãŒãã¯ã䞊è¡ã¬ã³ããªã³ã°ãé§åãããšã³ãžã³ã§ããããã¯ãFiberããªãŒããã©ããŒã¹ããåFiberããŒãã§äœæ¥ãå®è¡ããUIãæ®µéçã«æŽæ°ããååž°é¢æ°ã§ããã¯ãŒã¯ã«ãŒãã¯ã次ã®ã¿ã¹ã¯ãæ åœããŸãã
- åŠçããæ¬¡ã®Fiberã®éžæã
- Fiberã§ã®äœæ¥ã®å®è¡ïŒäŸïŒæ°ããç¶æ ã®èšç®ãpropsã®æ¯èŒãã³ã³ããŒãã³ãã®ã¬ã³ããªã³ã°ïŒã
- äœæ¥ã®çµæã§FiberããªãŒãæŽæ°ã
- å®è¡ããäœæ¥ã®ã¹ã±ãžã¥ãŒãªã³ã°ã
ã¯ãŒã¯ã«ãŒãã®ãã§ãŒãº
ã¯ãŒã¯ã«ãŒãã¯ãäž»ã«2ã€ã®ãã§ãŒãºã§æ§æãããŸãã
- ã¬ã³ããªã³ã°ãã§ãŒãºïŒãªã³ã³ã·ãªãšãŒã·ã§ã³ãã§ãŒãºãšãåŒã°ããŸãïŒïŒ ãã®ãã§ãŒãºã¯ãwork-in-progress FiberããªãŒã®æ§ç¯ãæ åœããŸãããã®ãã§ãŒãºäžãReactã¯FiberããªãŒããã©ããŒã¹ããçŸåšã®ããªãŒãšç®çã®ç¶æ ãæ¯èŒããå¿ èŠãªå€æŽã決å®ããŸãããã®ãã§ãŒãºã¯éåæã§ãå²ã蟌ã¿å¯èœã§ããDOMã§å€æŽãã*å¿ èŠ*ããããã®ã決å®ããŸãã
- ã³ããããã§ãŒãºïŒ ãã®ãã§ãŒãºã¯ã倿Žãå®éã®DOMã«é©çšãã圹å²ãæ ããŸãããã®ãã§ãŒãºäžãReactã¯DOMããŒããæŽæ°ããæ°ããããŒãã远å ããå€ãããŒããåé€ããŸãããã®ãã§ãŒãºã¯åæçã§ãå²ã蟌ã¿ã§ããŸãããDOMã*å®éã«*倿ŽããŸãã
ã¯ãŒã¯ã«ãŒããã©ã®ããã«äžŠè¡æ§ãå®çŸããã
䞊è¡ã¬ã³ããªã³ã°ã®éµã¯ãã¬ã³ããªã³ã°ãã§ãŒãºãéåæã§å²ã蟌ã¿å¯èœã§ãããšããäºå®ã«ãããŸããããã¯ãReactããã€ã§ãã¬ã³ããªã³ã°ãã§ãŒãºãäžæåæ¢ããŠããã©ãŠã¶ããŠãŒã¶ãŒå ¥åããããã¯ãŒã¯ãªã¯ãšã¹ããªã©ã®ä»ã®ã¿ã¹ã¯ãåŠçã§ããããã«ããããšãæå³ããŸãããã©ãŠã¶ãã¢ã€ãã«ç¶æ ã®å ŽåãReactã¯äžæãããšããããã¬ã³ããªã³ã°ãã§ãŒãºãåéã§ããŸãã
ã¬ã³ããªã³ã°ãã§ãŒãºãäžæåæ¢ããã³åéã§ãããã®æ©èœã«ãããReactã¯ã¬ã³ããªã³ã°ã¿ã¹ã¯ãä»ã®ãã©ãŠã¶æäœãšã€ã³ã¿ãŒãªãŒãããã¡ã€ã³ã¹ã¬ããããããã¯ãããã®ãé²ããããå¿çæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãä¿èšŒããŸããäžæ¹ãã³ããããã§ãŒãºã¯ãUIã®äžè²«æ§ãä¿èšŒããããã«åæããå¿ èŠããããŸãããã ããéåžžãã³ããããã§ãŒãºã¯ã¬ã³ããªã³ã°ãã§ãŒãºãããã¯ããã«é«éã§ãããããéåžžãããã©ãŒãã³ã¹ã®ããã«ããã¯ãåŒãèµ·ããããšã¯ãããŸããã
ã¯ãŒã¯ã«ãŒãã§ã®åªå é äœä»ã
Reactã¯ãåªå 床ããŒã¹ã®ã¹ã±ãžã¥ãŒãªã³ã°ã¢ã«ãŽãªãºã ã䜿çšããŠãæåã«åŠçããFiberããŒããæ±ºå®ããŸãããã®ã¢ã«ãŽãªãºã ã¯ããã®éèŠåºŠã«åºã¥ããŠåæŽæ°ã«åªå 床ã¬ãã«ãå²ãåœãŠãŸããããšãã°ããŠãŒã¶ãŒå ¥åã«ãã£ãŠããªã¬ãŒãããæŽæ°ã¯ãéåžžãããã¯ã°ã©ãŠã³ãããŒã¿ãã§ããã«ãã£ãŠããªã¬ãŒãããæŽæ°ãããé«ãåªå 床ãå²ãåœãŠãããŸãã
ã¯ãŒã¯ã«ãŒãã¯åžžã«ãæãé«ãåªå 床ãæã€FiberããŒããæåã«åŠçããŸããããã«ãããã¯ãªãã£ã«ã«ãªæŽæ°ãè¿ éã«åŠçãããå¿çæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸãããŸããéèŠåºŠã®äœãæŽæ°ã¯ããã©ãŠã¶ãã¢ã€ãã«ç¶æ ã®ãšãã«ããã¯ã°ã©ãŠã³ãã§åŠçãããŸãã
ãã®åªå é äœä»ãã·ã¹ãã ã¯ãç¹ã«å€æ°ã®åææŽæ°ãããè€éãªã¢ããªã±ãŒã·ã§ã³ã§ãã¹ã ãŒãºãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãç¶æããããã«éåžžã«éèŠã§ãããŠãŒã¶ãŒãæ€çŽ¢ããŒã«å ¥åããŠãããšåæã«ãã¢ããªã±ãŒã·ã§ã³ãæšå¥šãããæ€çŽ¢èªã®ãªã¹ãããã§ããããŠè¡šç€ºããŠããã·ããªãªãèããŠã¿ãŸããããããã¹ããã£ãŒã«ããå¿çæ§ãç¶æã§ããããã«ããŠãŒã¶ãŒã®å ¥åã«é¢é£ããæŽæ°ãåªå ããæšå¥šãããæ€çŽ¢èªã«é¢é£ããæŽæ°ã¯ããã¯ã°ã©ãŠã³ãã§åŠçã§ããŸãã
䞊è¡ã¬ã³ããªã³ã°ã®å®çšçãªäŸ
䞊è¡ã¬ã³ããªã³ã°ãReactã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãšãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãã©ã®ããã«åäžãããããšãã§ãããã«ã€ããŠãããã€ãã®å®çšçãªäŸãèŠãŠã¿ãŸãããã
1. ãŠãŒã¶ãŒå ¥åã®ãããŠã³ã¹
ãŠãŒã¶ãŒãå ¥åãããšæ€çŽ¢çµæã衚瀺ããæ€çŽ¢ããŒãèããŠã¿ãŸãããã䞊è¡ã¬ã³ããªã³ã°ããªãå ŽåãåããŒã¹ãããŒã¯ã¯æ€çŽ¢çµæãªã¹ãå šäœã®åã¬ã³ããªã³ã°ãããªã¬ãŒããå¯èœæ§ããããããã©ãŒãã³ã¹ã®åé¡ãšããããããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ã€ãªãããŸãã
䞊è¡ã¬ã³ããªã³ã°ã䜿çšãããšããããŠã³ã¹ã䜿çšããŠããŠãŒã¶ãŒãçæéå ¥åã忢ãããŸã§æ€çŽ¢çµæã®ã¬ã³ããªã³ã°ãé ãããããšãã§ããŸããããã«ãããReactã¯ãŠãŒã¶ãŒå ¥åãåªå ããUIãå¿çããªããªãã®ãé²ãããšãã§ããŸãã
ç°¡åãªäŸã次ã«ç€ºããŸãã
import React, { useState, useCallback } from 'react';
function SearchBar() {
const [searchTerm, setSearchTerm] = useState('');
const debouncedSearch = useCallback(
debounce((value) => {
// Perform search logic here
console.log('Searching for:', value);
}, 300),
[]
);
const handleChange = (event) => {
const value = event.target.value;
setSearchTerm(value);
debouncedSearch(value);
};
return (
);
}
// Debounce function
function debounce(func, delay) {
let timeout;
return function(...args) {
const context = this;
clearTimeout(timeout);
timeout = setTimeout(() => func.apply(context, args), delay);
};
}
export default SearchBar;
ãã®äŸã§ã¯ãdebounce颿°ã¯ããŠãŒã¶ãŒã300ããªç§éå
¥åã忢ãããŸã§ãæ€çŽ¢ããžãã¯ã®å®è¡ãé
ãããŸããããã«ãããæ€çŽ¢çµæã¯å¿
èŠãªå Žåã«ã®ã¿ã¬ã³ããªã³ã°ãããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžããŸãã
2. ç»åã®é å»¶èªã¿èŸŒã¿
倧ããªç»åãèªã¿èŸŒããšãWebããŒãžã®åæããŒãæéã«å€§ããªåœ±é¿ãäžããå¯èœæ§ããããŸãã䞊è¡ã¬ã³ããªã³ã°ã䜿çšãããšãé å»¶èªã¿èŸŒã¿ã䜿çšããŠãç»åããã¥ãŒããŒãã«è¡šç€ºããããŸã§ç»åã®èªã¿èŸŒã¿ãå»¶æã§ããŸãã
ãã®ææ³ã¯ããŠãŒã¶ãŒãããŒãžãšã®å¯Ÿè©±ãéå§ããåã«ãã¹ãŠã®ç»åãèªã¿èŸŒãŸããã®ãåŸ ã€å¿ èŠããªããããã¢ããªã±ãŒã·ã§ã³ã®èªèãããããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸãã
react-lazyloadã©ã€ãã©ãªã䜿çšããç°¡åãªäŸã次ã«ç€ºããŸãã
import React from 'react';
import LazyLoad from 'react-lazyload';
function ImageComponent({ src, alt }) {
return (
Loading...}>
);
}
export default ImageComponent;
ãã®äŸã§ã¯ãLazyLoadã³ã³ããŒãã³ãã¯ãç»åããã¥ãŒããŒãã«è¡šç€ºããããŸã§ç»åã®èªã¿èŸŒã¿ãé
ãããŸããplaceholderpropã䜿çšãããšãç»åã®èªã¿èŸŒã¿äžã«èªã¿èŸŒã¿ã€ã³ãžã±ãŒã¿ãŒã衚瀺ã§ããŸãã
3. ããŒã¿ãã§ããã³ã°ã®ããã®Suspense
React Suspenseã䜿çšãããšãããŒã¿ã®èªã¿èŸŒã¿ãåŸ æ©ããŠããéãã³ã³ããŒãã³ãã®ã¬ã³ããªã³ã°ããäžæåæ¢ãã§ããŸããããã¯ãAPIããã®ããŒã¿ãåŸ æ©ããŠããéã«èªã¿èŸŒã¿ã€ã³ãžã±ãŒã¿ãŒã衚瀺ããå Žåãªã©ãããŒã¿ãã§ããã³ã°ã®ã·ããªãªã§ç¹ã«åœ¹ç«ã¡ãŸãã
Suspenseã¯äžŠè¡ã¬ã³ããªã³ã°ãšã·ãŒã ã¬ã¹ã«çµ±åãããReactãããŒã¿ã®èªã¿èŸŒã¿ãåªå ããUIãå¿çããªããªãã®ãé²ããŸãã
ç°¡åãªäŸã次ã«ç€ºããŸãã
import React, { Suspense } from 'react';
// A fake data fetching function that returns a Promise
const fetchData = () => {
return new Promise(resolve => {
setTimeout(() => {
resolve({ data: 'Data loaded!' });
}, 2000);
});
};
// A React component that uses Suspense
function MyComponent() {
const resource = fetchData();
return (
Loading... ãã®äŸã§ã¯ãMyComponentã¯Suspenseã³ã³ããŒãã³ãã䜿çšããŠãããŒã¿ã®ãã§ããäžã«èªã¿èŸŒã¿ã€ã³ãžã±ãŒã¿ãŒã衚瀺ããŸããDataDisplayã³ã³ããŒãã³ãã¯ãresourceãªããžã§ã¯ãããããŒã¿ã䜿çšããŸããããŒã¿ãå©çšå¯èœã«ãªããšãSuspenseã³ã³ããŒãã³ãã¯èªã¿èŸŒã¿ã€ã³ãžã±ãŒã¿ãŒãDataDisplayã³ã³ããŒãã³ãã«èªåçã«çœ®ãæããŸãã
ã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã®å©ç¹
React䞊è¡ã¬ã³ããªã³ã°ã®å©ç¹ã¯ããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã«æ¡åŒµãããŸãããç¹ã«ã°ããŒãã«ãªãŒãã£ãšã³ã¹ãã¿ãŒã²ãããšããã¢ããªã±ãŒã·ã§ã³ã«å€§ããªåœ±é¿ãäžããŸãããã®çç±ã¯æ¬¡ã®ãšããã§ãã
- ããŸããŸãªãããã¯ãŒã¯æ¡ä»¶ïŒ äžçã®ããŸããŸãªå°åã®ãŠãŒã¶ãŒã¯ããããã¯ãŒã¯é床ãšä¿¡é Œæ§ãå€§å¹ ã«ç°ãªããŸãã䞊è¡ã¬ã³ããªã³ã°ã䜿çšãããšãéèŠãªæŽæ°ãåªå ããUIãå¿çããªããªãã®ãé²ãããšã§ãã¢ããªã±ãŒã·ã§ã³ãé å»¶ãŸãã¯äžå®å®ãªãããã¯ãŒã¯æ¥ç¶ãæ£åžžã«åŠçã§ããŸããããšãã°ã垯åå¹ ãå¶éãããŠããå°åã®ãŠãŒã¶ãŒã¯ãéèŠåºŠã®äœãããŒã¿ãããã¯ã°ã©ãŠã³ãã§ããŒããããŠããéããã¢ããªã±ãŒã·ã§ã³ã®ã³ã¢æ©èœãšå¯Ÿè©±ã§ããŸãã
- 倿§ãªããã€ã¹æ©èœïŒ ãŠãŒã¶ãŒã¯ããã€ãšã³ããã¹ã¯ãããããäœé»åã¢ãã€ã«ãã©ã³ãŸã§ãå¹ åºãããã€ã¹ã§Webã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ããŸãã䞊è¡ã¬ã³ããªã³ã°ã¯ãã¬ã³ããªã³ã°ããã©ãŒãã³ã¹ãæé©åããã¡ã€ã³ã¹ã¬ããã®è² è·ã軜æžããããšã§ãã¢ããªã±ãŒã·ã§ã³ããã¹ãŠã®ããã€ã¹ã§é©åã«åäœããããã«ããã®ã«åœ¹ç«ã¡ãŸããããã¯ãæ§åŒã§äœé»åã®ããã€ã¹ãããæ®åããŠããçºå±éäžåœã§ç¹ã«éèŠã§ãã
- åœéåãšããŒã«ãªãŒãŒã·ã§ã³ïŒ è€æ°ã®èšèªãšãã±ãŒã«ããµããŒãããã¢ããªã±ãŒã·ã§ã³ã¯ãå€ãã®å Žåãããè€éãªã³ã³ããŒãã³ãããªãŒãšãã¬ã³ããªã³ã°ããããå€ãã®ããŒã¿ãæã¡ãŸãã䞊è¡ã¬ã³ããªã³ã°ã¯ãã¬ã³ããªã³ã°ã¿ã¹ã¯ãããå°ããäœæ¥åäœã«åå²ããéèŠåºŠã«åºã¥ããŠæŽæ°ã®åªå é äœä»ããè¡ãããšã§ããããã®ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžãããã®ã«åœ¹ç«ã¡ãŸããçŸåšéžæãããŠãããã±ãŒã«ã«é¢é£ããã³ã³ããŒãã³ãã®ã¬ã³ããªã³ã°ãåªå ããŠãå Žæã«é¢ä¿ãªãããŠãŒã¶ãŒã®ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããããšãã§ããŸãã
- ã¢ã¯ã»ã·ããªãã£ã®åäžïŒ å¿çæ§ãé«ããããã©ãŒãã³ã¹ã®é«ãã¢ããªã±ãŒã·ã§ã³ã¯ãé害ãæã€ãŠãŒã¶ãŒã«ãšã£ãŠããã¢ã¯ã»ã¹ãããããªããŸãã䞊è¡ã¬ã³ããªã³ã°ã¯ãUIãå¿çããªããªãã®ãé²ããæ¯æŽæè¡ãã¢ããªã±ãŒã·ã§ã³ãšé©åã«å¯Ÿè©±ã§ããããã«ããããšã§ãã¢ããªã±ãŒã·ã§ã³ã®ã¢ã¯ã»ã·ããªãã£ãåäžãããã®ã«åœ¹ç«ã¡ãŸããããšãã°ãã¹ã¯ãªãŒã³ãªãŒããŒã¯ãã¹ã ãŒãºã«ã¬ã³ããªã³ã°ãããã¢ããªã±ãŒã·ã§ã³ã®ã³ã³ãã³ããããç°¡åã«ããã²ãŒãããŠè§£éã§ããŸãã
å®çšçãªæŽå¯ãšãã¹ããã©ã¯ãã£ã¹
React䞊è¡ã¬ã³ããªã³ã°ã广çã«æŽ»çšããã«ã¯ã次ã®ãã¹ããã©ã¯ãã£ã¹ãæ€èšããŠãã ããã
- ã¢ããªã±ãŒã·ã§ã³ã®ãããã¡ã€ãªã³ã°ïŒ Reactã®ãããã¡ã€ã©ããŒã«ã䜿çšããŠãããã©ãŒãã³ã¹ã®ããã«ããã¯ãšã䞊è¡ã¬ã³ããªã³ã°ãæå€§ã®å©ç¹ãããããå¯èœæ§ã®ããé åãç¹å®ããŸãããããã¡ã€ã©ã¯ãã³ã³ããŒãã³ãã®ã¬ã³ããªã³ã°ããã©ãŒãã³ã¹ã«é¢ãã貎éãªæŽå¯ãæäŸããæãã³ã¹ãã®ãããæäœãç¹å®ããŠãããã«å¿ããŠæé©åã§ããŸãã
React.lazyãšSuspenseã®äœ¿çšïŒ ãããã®æ©èœã¯ã䞊è¡ã¬ã³ããªã³ã°ãšã·ãŒã ã¬ã¹ã«é£æºããããã«èšèšãããŠãããã¢ããªã±ãŒã·ã§ã³ã®èªèãããããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸãããããã䜿çšããŠãã³ã³ããŒãã³ããé å»¶ããŒãããããŒã¿ã®ããŒããåŸ æ©ããŠããéãèªã¿èŸŒã¿ã€ã³ãžã±ãŒã¿ãŒã衚瀺ããŸãã- ãŠãŒã¶ãŒå ¥åã®ãããŠã³ã¹ãšã¹ããããªã³ã°ïŒ ãŠãŒã¶ãŒå ¥åã€ãã³ãããããŠã³ã¹ãŸãã¯ã¹ããããªã³ã°ããŠãäžèŠãªåã¬ã³ããªã³ã°ãåé¿ããŸããããã«ãããUIãå¿çããªããªãã®ãé²ããå šäœçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããŸãã
- ã³ã³ããŒãã³ãã¬ã³ããªã³ã°ã®æé©åïŒ ã³ã³ããŒãã³ããå¿
èŠãªå Žåã«ã®ã¿åã¬ã³ããªã³ã°ãããããã«ããŸãã
React.memoãŸãã¯useMemoã䜿çšããŠãã³ã³ããŒãã³ãã¬ã³ããªã³ã°ãã¡ã¢åããäžèŠãªæŽæ°ãé²ããŸãã - é·æéå®è¡ãããåæã¿ã¹ã¯ã®åé¿ïŒ ã¡ã€ã³ã¹ã¬ããã®ãããã¯ãé²ãããã«ãé·æéå®è¡ãããåæã¿ã¹ã¯ãããã¯ã°ã©ãŠã³ãã¹ã¬ãããŸãã¯Webã¯ãŒã«ãŒã«ç§»åããŸãã
- éåæããŒã¿ãã§ããã³ã°ã®æ¡çšïŒ éåæããŒã¿ãã§ããã³ã°æè¡ã䜿çšããŠãããã¯ã°ã©ãŠã³ãã§ããŒã¿ãããŒãããUIãå¿çããªããªãã®ãé²ããŸãã
- ããŸããŸãªããã€ã¹ãšãããã¯ãŒã¯æ¡ä»¶ã§ã®ãã¹ãïŒ ããŸããŸãªããã€ã¹ãšãããã¯ãŒã¯æ¡ä»¶ã§ã¢ããªã±ãŒã·ã§ã³ã培åºçã«ãã¹ãããŠããã¹ãŠã®ãŠãŒã¶ãŒã«å¯ŸããŠé©åã«åäœããããšã確èªããŸãããã©ãŠã¶ã®éçºè ããŒã«ã䜿çšããŠãããŸããŸãªãããã¯ãŒã¯é床ãšããã€ã¹æ©èœãã·ãã¥ã¬ãŒãããŸãã
- ç¹ã«ã³ãŒãåå²ã®ããã«Suspenseãçµã¿èŸŒãå Žåã¯ãTanStack Routerã®ãããªã©ã€ãã©ãªã䜿çšããŠã«ãŒãé·ç§»ãå¹ççã«ç®¡çããããšãæ€èšããŠãã ããã
çµè«
Fiberã¢ãŒããã¯ãã£ãšã¯ãŒã¯ã«ãŒããæèŒããReact䞊è¡ã¬ã³ããªã³ã°ã¯ãããã³ããšã³ãéçºã«ããã倧ããªé£èºã衚ããŠããŸããå²ã蟌ã¿å¯èœã§ã€ã³ã¯ãªã¡ã³ã¿ã«ãªã¬ã³ããªã³ã°ãåªå é äœä»ããããã³ãšã©ãŒåŠçã®æ¹åãå¯èœã«ããããšã§ã䞊è¡ã¬ã³ããªã³ã°ã¯å€§å¹ ãªããã©ãŒãã³ã¹ã®åäžãå®çŸããã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã®ããå¿çæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãå¯èœã«ããŸãã䞊è¡ã¬ã³ããªã³ã°ã®åºæ¬çãªæŠå¿µãçè§£ãããã®èšäºã§æŠèª¬ãããŠãããã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ãäžçäžã®ãŠãŒã¶ãŒãåã°ããã髿§èœã§ãŠãŒã¶ãŒãã¬ã³ããªãŒãªReactã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸããReactãé²åãç¶ããã«ã€ããŠã䞊è¡ã¬ã³ããªã³ã°ã¯Webéçºã®æªæ¥ã圢äœãäžã§ãŸããŸãéèŠãªåœ¹å²ãæããããšã¯ééããããŸããã